Collectively, computers in enterprise environments use a lot of energy by remaining on when idle. By putting these machines to sleep, large enterprises can achieve significant cost savings. In cloud service environments, for example, some threshold number of servers may be kept awake to provide cloud services. While some servers may be permitted to sleep, their availability is maintained in case of increased demand for services. In desktop environments, many operating systems (OSes) put a desktop machine to sleep after some amount of user idle time, but users and IT administrators typically override this to enable remote access. Remote access is typically used to remotely access files or other resources on the desktop. IT administrators may use remote access to access other desktops to perform maintenance tasks. Thus, any system for putting machines to sleep also attempts to maintain their availability for remote access.
There are a number of approaches for achieving the power savings of sleeping machines while maintaining their availability. However, many of the approaches are challenging to implement. Some approaches use specialized hardware. Others use a fully virtualized desktop, or application stubs, which implicate further technological challenges.